package load;

import java.util.ArrayList;
import java.util.Date;
import negocio.ItemListaReposicion;
import negocio.ListaReposicion;
import negocio.Producto;
import negocio.Restaurante;
import app.Sistema;
import beans.FacturaVO;
import beans.IngredienteVO;
import beans.MesaVO;
import beans.PlatoVO;
import beans.ProductoVO;
import beans.RecetaVO;
import beans.SectorVO;

public class LoadDatosRestaurante {
	private Sistema sistema;
	
	public LoadDatosRestaurante()
	{
		sistema = Sistema.getInstancia();
		
		loadRestaurante();
		loadMozos();
		loadProductos();
		loadStocks();
		loadPlatos();
		loadPedido();
		cerrarPedido();
	}

	private void loadRestaurante()
	{
		try 
		{
			sistema.agregarRestaurante(new Restaurante("1"));
			sistema.agregarRestaurante(new Restaurante("2"));
			Restaurante r = sistema.getRestauranteById(1);
			Restaurante r2 = sistema.getRestauranteById(2);
			
			/**---------------------------------------------------**/
			
			r.cargarSalon(150);
			r2.cargarSalon(300);
			
			MesaVO mesa1 = new MesaVO(1,4);
			MesaVO mesa2 = new MesaVO(2,2);
			ArrayList<MesaVO> mesas1 = new ArrayList<MesaVO>();
			mesas1.add(mesa1);
			mesas1.add(mesa2);
			
			MesaVO mesa3 = new MesaVO(3,2);
			MesaVO mesa4 = new MesaVO(4,6);
			ArrayList<MesaVO> mesas2 = new ArrayList<MesaVO>();
			mesas2.add(mesa3);
			mesas2.add(mesa4);
			
			SectorVO sector1 = new SectorVO();
			sector1.setNombre("Sector 1");
			SectorVO sector2 = new SectorVO();
			sector2.setNombre("Sector 2");
			sector1.setMesas(mesas1);
			sector2.setMesas(mesas2);
			
			ArrayList<SectorVO> sectoresVO = new ArrayList<>();
			sectoresVO.add(sector1);
			sectoresVO.add(sector2);
			
			r.cargarSectores(sectoresVO);
		} 
		catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private void loadMozos()
	{
		try 
		{
			Restaurante r = sistema.getRestauranteById(1);
			r.agregarMozo(32769729, "Pablo Pettinari", "Sector 1", (float) 1.2);
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
	}
	
	private void loadProductos()
	{
		try 
		{
			Restaurante r = sistema.getRestauranteById(1);
			
			//Agrego dos insumos
			ProductoVO p = new ProductoVO("Tomate", "Verdura tomate", 10, "Verdura");
			ProductoVO p2 = new ProductoVO("Papa", "Verdura papa", 10, "Verdura");
			Producto i1 = r.agregarInsumo(p);
			Producto i2 = r.agregarInsumo(p2);
			
			//Agrego un semielaborado
			ProductoVO semiVO = new ProductoVO("Torta", "Torta de chocolate", 10, "Semielaborado");
			IngredienteVO ing = new IngredienteVO(p,2,"kilo");
			IngredienteVO ing2 = new IngredienteVO(p2,3,"kilo");
			ArrayList<IngredienteVO> ingredientes = new ArrayList<IngredienteVO>();
			ingredientes.add(ing);
			ingredientes.add(ing2);
			RecetaVO receta = new RecetaVO(ingredientes);
			Producto semi = r.agregarSemielaborado(semiVO, receta);
			
			//Agrego estimados para cada producto creado y para cada area del resto
			r.agregarProductoEstimado(i1, "Local", 30, 15);
			r.agregarProductoEstimado(i2, "Local", 20, 10);
			r.agregarProductoEstimado(semi, "Local", 5, 1);
			r.agregarProductoEstimado(i1, "Cocina", 10, 5);
			r.agregarProductoEstimado(i2, "Cocina", 5, 3);
			r.agregarProductoEstimado(semi, "Cafeteria", 3, 1);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	private void loadStocks()
	{
		try {
			Restaurante r = sistema.getRestauranteById(1);
			
			Producto i1 = r.buscarProducto("Tomate");
			Producto i2 = r.buscarProducto("Papa");
			Producto semi = r.buscarProducto("Torta");
			
			//Realizo reposicion de Insumos
			ItemListaReposicion itemLista = new ItemListaReposicion(i1,30,"Roberto","Local", new Date(), new Date(), 8);
			ItemListaReposicion itemLista2 = new ItemListaReposicion(i1,10,"Roberto","Cocina", new Date(), new Date(), 1);
			ItemListaReposicion itemLista3 = new ItemListaReposicion(i2,20,"Alberto","Local", new Date(), new Date(), 1);
			ItemListaReposicion itemLista4 = new ItemListaReposicion(semi,5,"Roberto","Local", new Date(), new Date(), 2);
			ItemListaReposicion itemLista5 = new ItemListaReposicion(semi,30,"Roberto","Cafeteria", new Date(), new Date(), 12);
			ItemListaReposicion itemLista6 = new ItemListaReposicion(i2,30,"Jacinto","Cocina", new Date(), new Date(), 3);
			ArrayList<ItemListaReposicion> items = new ArrayList<>();
			items.add(itemLista);
			items.add(itemLista2);
			items.add(itemLista3);
			items.add(itemLista4);
			items.add(itemLista5);
			items.add(itemLista6);
			ListaReposicion lista = new ListaReposicion();
			lista.setItems(items);
			ArrayList<ListaReposicion> listasReposicion = new ArrayList<>();
			listasReposicion.add(lista);
			
			r.reponerInsumos(listasReposicion);
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	private void loadPlatos()
	{
		try {
			Restaurante r = sistema.getRestauranteById(1);
			
			Producto i1 = r.buscarProducto("Tomate");
			Producto i2 = r.buscarProducto("Papa");
			Producto semi = r.buscarProducto("Torta");
			
			ArrayList<IngredienteVO> ingredientes = new ArrayList<IngredienteVO>();
			IngredienteVO ing1 = new IngredienteVO(i1.getVO(), 2, "kilos");
			IngredienteVO ing2 = new IngredienteVO(i2.getVO(), 1, "kilos");
			ingredientes.add(ing1);
			ingredientes.add(ing2);
			RecetaVO receta = new RecetaVO(ingredientes);
			PlatoVO plato = new PlatoVO(receta, 50, "Ensalada tomate y papa", "Ensalada", "Cocina",5);
			
			ArrayList<IngredienteVO> ingredientes2 = new ArrayList<IngredienteVO>();
			IngredienteVO ing3 = new IngredienteVO(semi.getVO(), 1, "unidad");
			ingredientes2.add(ing3);
			RecetaVO receta2 = new RecetaVO(ingredientes2);
			PlatoVO plato2 = new PlatoVO(receta2, 15, "Torta super", "Torta", "Cafeteria",3);
			
			r.agregarPlato(plato);
			r.agregarPlato(plato2);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	private void loadPedido()
	{
		try {
			Restaurante r = sistema.getRestauranteById(1);
			
			r.abrirCaja();
			
			//Abrir mesa
			r.abrirMesa(1, 4);
			
			ArrayList<Integer> idPlatos = new ArrayList<Integer>();
			idPlatos.add(1);
			idPlatos.add(2);
			r.generarPedido(idPlatos, 1, 32769729, true);
			r.generarPedido(idPlatos, 1, 32769729, true);
			
			//Terminar platos
			r.terminarPlato(1, "Cocina");
			r.terminarPlato(2, "Cafeteria");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	private void cerrarPedido() 
	{
		try 
		{
			Restaurante r = sistema.getRestauranteById(1);
			
			//Genero la factura antes de cerrar la mesa.
			FacturaVO factura = r.generarFactura(1, "Efectivo");
			
			r.cerrarMesa(1);
			r.liberarMesa(1);
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
	}
}
